package com.dxf.chepter09

/**
 * 密封类(sealed):
 *  1 如果想让case类的所有子类都必须在申明改类的相同源文件中定义,可以将样例类 通过超类申明为sealed,这个超类称之为密封类
 *  2 密封就是不能再其它文件中定义子类
 *
 */
object T120_密封类 {


  def main(args: Array[String]): Unit = {


  }
}


/**
 *  Dollar   Currecy  NoAmount 是样例类
 *
 *  样例类可是是 类 class 也可以是 object 对象
 *
 *
 *
 *   1 样例类任然是类
 *   2 样例类用 case 关键字声明
 *   3 样例类是为模板匹配而优化的类
 *   4 构造器中的每一个参数默认是 val 除非被声明 var    case class Dollar(value:Double)  --->  case class Dollar( var value:Double)
 *   5 样例类对应的伴生对象中提供apply方法,让你不同new 关键字就能构造出对象
 *   6 提供unapply() 方法让模式匹配可以工作
 *   7 将自动生成 toString,equals,hashCode和copy 方法
 *   8 样例类除了以上和其他类完全一样
 */

//sealed 修饰的 Amount1 只能在文件中使用
abstract sealed class Amount1

case class Dollar1(value: Double) extends Amount1

case class Currecy1(value: Double, unit: String) extends Amount1

case object NoAmount1 extends Amount1

